#include "cpu/exec/helper.h"

make_helper(call_si)
{
    int len=decode_si_l(eip+1);//读取指令长度
    swaddr_t ret_addr=cpu.eip+len+1;//算出返回地址
    swaddr_write(cpu.esp-4,4,ret_addr);//向栈中写入返回地址
    cpu.esp-=4;//更新栈指针（开辟栈空间）
    cpu.eip+=op_src->val;//更新$eip的值，实现跳转
    print_asm("call %x", cpu.eip + 1 + len);
    return len+1;
}

make_helper(call_rm)
{
    int len=decode_rm_l(eip+1);//读取指令长度
    swaddr_t ret_addr=cpu.eip+len+1;//算出返回地址
    swaddr_write(cpu.esp-4,4,ret_addr);//向栈中写入返回地址
    cpu.esp-=4;//更新栈指针（开辟栈空间）
    cpu.eip=op_src->val-(len+1);//更新$eip的值，实现跳转
    print_asm("call *%s", op_src->str);
    return len+1;
}